/**
 * 装饰模式（Decorator Pattern）
 * <p>
 * 装饰器模式（Decorator Pattern）是一种结构设计模式，它允许在不修改原有对象结构的情况下，动态地给对象添加额外的功能。
 * </p>
 * <ul>
 *  这种模式通过创建一个装饰器类来包裹原始对象，从而在运行时对其进行扩展。装饰器模式的使用场景包括：
 *  <li>
 *      1. 动态扩展对象功能：当你需要在运行时动态地添加对象的功能，而不希望通过继承来创建多个子类时，可以使用装饰器模式。装饰器模式允许你在不修改原始对象的情况下，动态地增加功能。
 *  </li>
 *  <li>
 *      2.避免类爆炸：当类的功能有很多不同的组合时，使用装饰器模式可以避免生成大量的子类。例如，如果一个窗口可以有不同的滚动条、边框和颜色，你可以使用装饰器模式来组合这些功能，而不是为每种组合创建一个新类。
 *  </li>
 *  <li>
 *      3.功能的逐层添加：当你需要逐层添加功能时，装饰器模式非常合适。例如，在处理文件流时，你可以通过多个装饰器来添加压缩、加密等功能，每个装饰器都可以在流的基础上添加新的行为。
 *  </li>
 *  <li>
 *      4.遵循开闭原则：装饰器模式遵循开闭原则，即对扩展开放，对修改关闭。通过使用装饰器，你可以在不修改原有类的情况下扩展其功能，从而更容易维护和扩展系统。
 *  </li>
 *  <li>
 *      5.透明性和灵活性：装饰器模式可以让你在不改变原始对象接口的情况下增加功能，使得扩展和修改对象行为变得更加灵活和透明。每个装饰器都实现了与原始对象相同的接口，因此可以随意组合使用。
 *  </li>
 *  </ul>
 *  <br/>
 *  一个简单的例子：
 *      去洗脚，可选：果盘，餐饮；醋，艾草；技师；加钟···
 *      但是对于一个单纯去洗脚的来说，我只需要洗脚，不需要其他的
 *      同时也可以有多种选择，多种组合方式，使用装饰器模式，可以动态选择想要的功能，功能之间互相减少耦合，避免类的臃肿
 * @Author Zhao Tianhao
 * @Description 装饰器/装饰模式（Decorator Pattern）
 * @Date 2024/7/23 17:15
 */
package com.friends.design.mode.decorate;